//======================================================================
//文件名称：uart.h
//功能概要：UART底层驱动构件头文件
//芯片类型：STM32F103C8T6
//版权所有：江苏电子-索明何
//版本更新：2023-01-16  V1.0
//======================================================================
#ifndef  _UART_H              //防止重复定义（开头）
#define  _UART_H

//1.头文件包含
#include  "common.h"          //包含公共要素软件构件头文件

//2.宏定义
//(1)UART号宏定义
#define  UART1    0
#define  UART2    1
#define  UART3    2

//(2)UART使用的引脚宏定义（由具体硬件板决定）
#define  UART1_GROUP   2     //UART1: 1=PTA9-TX、PTA10-RX，2=PTB6-TX、PTB7-RX
#define  UART2_GROUP   1     //UART2: 1=PTA2-TX、PTA3-RX
#define  UART3_GROUP   1     //UART3: 1=PTB10-TX、PTB11-RX

//3.对外接口函数声明
//======================================================================
//函数名称：uart_init
//函数功能：对指定的UART进行初始化
//函数参数：UARTx:  UART号（可用宏定义UART1、UART2或UART3作为函数实参）
//          BaudRate: 波特率，建议使用2400、4800、9600、19200、115200、...（bit/s）
//函数返回：无
//函数调用示例：
//   uart_init(UART2, 9600);      //初始化UART2，波特率为9600bit/s
//======================================================================
void uart_init(uint8 UARTx, uint32 BaudRate);

//======================================================================
//函数名称：uart_send1
//函数功能：从指定的UART发送1个字符
//函数参数：UARTx:  UART号（可用宏定义UART1、UART2或UART3作为函数实参）
//          send_data: 待发送的字符
//函数返回：1表示发送成功，0表示发送失败
//函数调用示例：
//    uart_send1(UART2, 'A');     //通过UART2发送1个字符 'A'
//======================================================================
uint8 uart_send1(uint8 UARTx, uint8 send_data);

//======================================================================
//函数名称：uart_sendN
//函数功能：从指定的UART发送多个字符
//函数参数：UARTx: UART号（可用宏定义UART1、UART2或UART3作为函数实参） 
//          n:     待发送的字符个数（1~65535）
//          *buff: 用于指向发送缓冲区的首地址（可用实参数组名或指针变量作为函数实参）
//函数返回：1表示发送成功，0表示发送失败
//函数调用示例：
//    uart_sendN(UART2, 10, str);   //通过UART2发送字符数组str中的前10个字符
//    uart_sendN(UART2, 10, ps);    //通过UART2发送指针变量ps所指向的字符串中的前10个字符
//======================================================================
uint8 uart_sendN(uint8 UARTx, uint16 n, uint8 *buff);

//======================================================================
//函数名称：uart_send_string
//函数功能：从指定的UART发送一个字符串
//函数参数：UARTx: UART号（可用宏定义UART1、UART2或UART3作为函数实参） 
//          *buff: 用于指向发送缓冲区的首地址（可用实参数组名或指针变量作为函数实参）
//函数返回：1表示发送成功，0表示发送失败
//函数调用示例：
//    uart_send_string(UART2, str);    //通过UART2发送字符数组str中的字符串
//    uart_send_string(UART2, ps);     //通过UART2发送指针变量ps所指向的字符串
//======================================================================
uint8 uart_send_string(uint8 UARTx, uint8 *buff);

//======================================================================
//函数名称：uart_recv1
//函数功能：从指定的UART接收1个字符，同时清除接收中断标志
//函数参数：UARTx:    UART号（可用宏定义UART1、UART2或UART3作为函数实参）
//          *re_flag: 用于传回接收状态的标志（1表示接收成功，0表示接收失败）
//                   （可用实参变量的地址作为函数实参，使实参变量获取接收状态标志值）
//函数返回：接收到的字符
//函数调用示例：
//  通过UART2接收1个字符，赋给字符变量re_data，并将接收状态标志值传给实参变量flag
//  re_data = uart_recv1(UART2, &flag); 
//======================================================================
uint8 uart_recv1(uint8 UARTx, uint8 *re_flag);

//======================================================================
//函数名称：uart_recvN
//函数功能：从指定的UART接收多个字符
//函数参数：UARTx: UART号（可用宏定义UART1、UART2或UART3作为函数实参）
//          n:     接收字符的个数（1~65535）
//          *buff: 用于指向接收缓冲区的首地址（可用实参数组名作为函数实参）
//函数返回：1表示接收成功，0表示接收失败
//函数调用示例：
//    uart_recvN(UART2, 10, str);     //通过UART2接收10个字符，存入字符数组str中
//======================================================================
uint8 uart_recvN(uint8 UARTx, uint16 n, uint8 *buff);

//======================================================================
//函数名称：uart_recv_int_enable
//函数功能：使能指定UART的接收中断
//函数参数：UARTx: UART号（可用宏定义UART1、UART2或UART3作为函数实参）
//函数返回：无
//函数调用示例：
//   uart_recv_int_enable(UART2);     //使能UART2接收中断
//======================================================================
void uart_recv_int_enable(uint8 UARTx);

//======================================================================
//函数名称：uart_recv_int_disable
//函数功能：禁止指定UART的接收中断
//函数参数：UARTx: UART号（可用宏定义UART1、UART2或UART3作为函数实参） 
//函数返回：无
//函数调用示例：
//   uart_recv_int_disable(UART2);     //禁止UART2接收中断
//======================================================================
void uart_recv_int_disable(uint8 UARTx);

//======================================================================
//函数名称：uart_recv_int_get
//函数功能：获取指定UART的接收中断标志
//函数参数：UARTx: UART号（可用宏定义UART1、UART2或UART3作为函数实参）
//函数返回：1表示有接收中断，0表示无接收中断
//函数调用示例：
//    uart_recv_int_get(UART2);        //获取UART2的接收中断标志
//======================================================================
uint8 uart_recv_int_get(uint8 UARTx);

#endif           //防止重复定义（结尾）
